iT邦幫忙

2026 iThome 鐵人賽

DAY 7
0
IT Operation

網路為什麼筆記本:從一個封包開始,把 Router、Switch 與 Routing 串起來系列 第 7

Day 07|Router 有很多條路時怎麼選?從 /25 到 Longest Prefix Match

  • 分享至 

  • xImage
  •  

Day 06 終於在 Packet Tracer 裡把這條路真的跑起來:

PC0
↓
Router0
↓
Router1
↓
Server0

也第一次真的下了 Static Route:

ip route 10.0.0.0 255.255.255.0 192.168.12.2

但回頭看的時候,發現其實還有兩個洞。

第一個是:

ip route 到底是在指定什麼?

第二個是:

如果 Routing Table 裡很多條 Route 都可以走,Router 到底選哪一條?

又繞回了 /24、/25、/26。

原來 CIDR 不是 Subnetting 才會用到。

Router 每次查 Routing Table,其實就在用這些 Prefix 判斷:

這個 Destination IP 到底屬於哪一條 Route?


ip route 不是在指定完整旅程

先看:

ip route 192.168.2.0 255.255.255.0 10.0.0.2

一開始很容易把這串看成一整坨指令。

拆開其實是:

ip route
→ 建立 Static Route

192.168.2.0
255.255.255.0
→ 目的網段是 192.168.2.0/24

10.0.0.2
→ Next Hop

翻成人話:

如果目的 IP 屬於 192.168.2.0/24,就先把 Packet 交給 10.0.0.2。

這裡有一個很重要的點:

Router 不需要先知道整趟路怎麼走。

它現在只需要知道:

下一棒要交給誰?

所以 Static Route 比較像:

目的網段
→ 下一跳

而不是:

從起點一路規劃到終點的完整導航

192.168.2.0/24 不是只有 .0

看到:

192.168.2.0/24

以前有時候會下意識把 192.168.2.0 看成「某一台」。

但在 Route 裡,它代表的是一個 Network。

/24 代表:

前 24 bits = Network bits
後 8 bits  = Host bits

所以:

2^8 = 256

整段範圍是:

192.168.2.0 ~ 192.168.2.255

因此:

192.168.2.87
192.168.2.100
192.168.2.200

全部都屬於:

192.168.2.0/24

所以如果 Routing Table 有:

192.168.2.0/24 → 10.0.0.2

Destination IP 是 192.168.2.87,當然也會匹配這條 Route。


/25 為什麼會變成 0~127 和 128~255?

這裡今天終於比較有感。

IPv4 一共有 32 bits。

如果是 /25:

前 25 bits = Network bits
後 7 bits  = Host bits

把第四個 octet 單獨拿出來:

N H H H H H H H
↑
第 25 個 bit

注意:

第 25 個 bit 已經是 Network bit。

剩下 7 個才是 Host bits。

所以這個 Network bit 只有兩種可能:

0xxxxxxx
1xxxxxxx

當最左邊是 0:

00000000 = 0
01111111 = 127

所以第一段是:

0 ~ 127

當最左邊是 1:

10000000 = 128
11111111 = 255

所以第二段是:

128 ~ 255

因此,把一個 /24 再切成 /25 時會得到:

192.168.2.0/25
→ 192.168.2.0 ~ 192.168.2.127

192.168.2.128/25
→ 192.168.2.128 ~ 192.168.2.255

而每一個 /25 有:

2^7 = 128 個總位址

傳統 IPv4 subnet 裡扣掉 Network Address 和 Broadcast Address,可用 Host 是 126 個。


同一套想法套到 /26

/26 代表:

前 26 bits = Network bits
後 6 bits  = Host bits

第四個 octet 就變成:

N N H H H H H H

前面兩個 Network bits 有四種可能:

00xxxxxx
01xxxxxx
10xxxxxx
11xxxxxx

因為還有 6 個 Host bits:

2^6 = 64

所以每一段有 64 個位址。

四段就是:

00xxxxxx → 0   ~ 63
01xxxxxx → 64  ~ 127
10xxxxxx → 128 ~ 191
11xxxxxx → 192 ~ 255

也就是:

192.168.2.0/26
192.168.2.64/26
192.168.2.128/26
192.168.2.192/26

這裡我原本很容易寫成:

0~64
65~127

但這樣第一段其實有 65 個數字。

比較不容易錯的方法是先找每段的「起點」:

0
64
128
192

再用:

下一段起點 - 1 = 這一段終點

所以:

0   ~ 63
64  ~ 127
128 ~ 191
192 ~ 255

先把 /24、/25、/26 放在一起

目前可以先這樣看:

/24
8 個 Host bits
2^8 = 256 個位址
0 ~ 255

/25
7 個 Host bits
2^7 = 128 個位址
0 ~ 127
128 ~ 255

/26
6 個 Host bits
2^6 = 64 個位址
0 ~ 63
64 ~ 127
128 ~ 191
192 ~ 255

所以 Prefix 越大:

/24
↓
/25
↓
/26

Network bits 越多,Host bits 越少,單一網段的範圍也越小。

換句話說:

Prefix 越長,描述的範圍通常越精準。

這件事就是 Router 接下來選 Route 的關鍵。


如果兩條 Route 都符合呢?

假設 Router 裡有:

192.168.2.0/24  → 10.0.0.2
192.168.2.64/26 → 10.0.0.3

現在 Destination IP 是:

192.168.2.70

先看 /24:

192.168.2.0 ~ 192.168.2.255

有包含 .70。

再看 /26:

192.168.2.64 ~ 192.168.2.127

也有包含 .70。

所以兩條 Route 都 Match。

那 Router 要選誰?

答案是:

192.168.2.64/26 → 10.0.0.3

因為:

/26 > /24

/26 的 Prefix 更長、範圍更精準。

這就是:

Longest Prefix Match

Longest Prefix Match 不是「數字看起來比較像」

再看一題:

172.16.0.0/16     → A
172.16.50.0/24    → B
172.16.50.128/25  → C
0.0.0.0/0         → D

Destination IP:

172.16.50.200

逐條看:

172.16.0.0/16
→ 172.16.x.x
→ 符合

172.16.50.0/24
→ 172.16.50.0 ~ 172.16.50.255
→ 符合

172.16.50.128/25
→ 172.16.50.128 ~ 172.16.50.255
→ 也符合

0.0.0.0/0
→ 也可以 Match

四條都能符合。

但 Router 最後選:

/25

也就是 C。

原因只有一個:

在所有符合 Destination IP 的 Route 裡,選 Prefix 最長的那條。

可以先養成這個解題順序:

1. 哪些 Route 包含 Destination IP?
2. 符合的 Route 裡,哪一個 /數字最大?
3. 選那一條的 Next Hop

/16 為什麼可以直接看成 172.16.x.x?

/16 比 /25 好看很多。

因為一個 octet 剛好 8 bits。

所以:

172.16.0.0/16

前 16 bits = Network
後 16 bits = Host

前兩個 octet 剛好就是:

172.16

因此可以直接想成:

172.16.x.x

範圍:

172.16.0.0 ~ 172.16.255.255

所以:

172.16.50.20

當然屬於:

172.16.0.0/16

目前 /8、/16、/24 都可以先這樣直覺看:

10.0.0.0/8
→ 10.x.x.x

172.16.0.0/16
→ 172.16.x.x

192.168.1.0/24
→ 192.168.1.x

真的比較需要停下來算的,通常是 /25、/26、/27 這種切在 octet 中間的 Prefix。


Default Route:0.0.0.0/0

如果是:

0.0.0.0/0

代表:

0 個 Network bits
32 個 Host bits

所以它可以涵蓋所有 IPv4 Destination。

例如:

192.168.1.0/24 → 10.0.0.2
0.0.0.0/0      → 10.0.0.1

Destination IP:

192.168.1.50

兩條都能 Match。

但:

/24 > /0

所以走 10.0.0.2。

如果 Destination IP 是:

8.8.8.8

又沒有其他更精準的 Route,最後才會落到:

0.0.0.0/0 → 10.0.0.1

所以 Default Route 可以先理解成:

其他更精準的 Route 都找不到時,最後的兜底路線。

它不是因為「優先權很高」才什麼都接。

剛好相反。

它是 Prefix 最短、最不精準的那一條。


Router 查 Route 的腦內流程

把今天全部濃縮,可以想成:

收到 Packet
↓
看 Destination IP
↓
查 Routing Table
↓
找出所有可以 Match 的 Route
↓
選 Longest Prefix Match
↓
取得 Next Hop / 出口
↓
把 Packet 往下一跳送

如果沒有任何更精準的 Route:

看看有沒有 0.0.0.0/0

有就走 Default Route。

沒有的話,就沒有路可以走。


Day 07 真正要記住的不是一堆數字

今天最重要的是把幾件原本分開的東西接在一起。

CIDR
→ 告訴我們 Network bits 有幾個
→ 也決定這個 Route 涵蓋多大的範圍

Static Route
→ 告訴 Router 某個目的網段要交給哪個 Next Hop

Longest Prefix Match
→ 多條 Route 都符合時,選範圍最精準的 Prefix

Default Route
→ 沒有更精準 Route 時最後兜底

目前看到:

/24 → 256 個總位址
/25 → 128 個總位址
/26 → 64 個總位址
/30 → 4 個總位址

不用要求自己看到 /27、/28 就馬上心算。

但至少要能自己推:

Host bits = 32 - Prefix

/25
→ 7 個 Host bits
→ 2^7 = 128

/26
→ 6 個 Host bits
→ 2^6 = 64

然後知道:

/25
0xxxxxxx → 0~127
1xxxxxxx → 128~255

這樣就不是在死背表格了。


重點小整理:過關標準

如果看到:

192.168.2.0/24   → A
192.168.2.128/25 → B
192.168.2.192/26 → C
0.0.0.0/0        → D

再給一個 Destination IP:

192.168.2.200

我們應該可以自己做兩件事:

1. 判斷它落在哪些網段裡
2. 從符合的 Route 中找出 Longest Prefix Match

這題最後會選:

192.168.2.192/26 → C

因為 .200 同時被 /24、/25、/26、/0 包住,但 /26 最精準。


上一篇
Day 06|第一次真的讓封包跨過兩台 Router
下一篇
Day 08|Static Route 不夠用怎麼辦?第一次搞懂 OSPF、Cost 與 ECMP
系列文
網路為什麼筆記本:從一個封包開始,把 Router、Switch 與 Routing 串起來9
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言